/* 设计一个递归算法，删除不带头节点的单链表L中所有值为x的结点 */

#include <iostream>
#include "fun.h"
using namespace std;

// 删除数值为x的结点
void del_x(LNode *&L, int x)
{
  // 辅助
  LNode *p;
  
  // 链表为空，直接返回
  if (L == NULL)
    return;
  
  // 如果当前结点数值为x，删除
  if (L->data == x)
  {
    p = L;
    L = L->next;
    free(p);
    del_x(L, x); // 递归
  }
  
  // 否则检查下个结点
  else
    del_x(L->next, x); // 递归：将原问题变成更小子问题
}

int main()
{
  // 创建不带头节点的链表
  LNode *L = nohead_Linklist();
  
  // 删除数值为10的结点
  del_x(L, 10);
  
  // 打印
  while (L != NULL)
  {
    cout << L->data << " ";
    L = L->next;
  }
  return 0;
}
